package controladorConsola;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import thieft.Capital;
import thieft.Juego;
import vistaConsola.Vista;

public class Controlador {

	private Juego juego;
	private Vista vista;
	
	public Controlador(Juego juego, Vista vista) {
		
		this.juego = juego;
		this.vista = vista;
	}
	
	public void comenzar() throws IOException {
		
		int casoLimite = 2;
		int cantidadDeCasos = 0;
		boolean continuar = true;
		
		while ( (cantidadDeCasos < casoLimite) && continuar ) {
			
		  this.juego.comenzarCaso();
		
		  if (juego.cantidadCasosJugados() == 1) {
			
			  String nombreJugador = this.vista.ingresarNombre();
			  juego.modificarNombrePolicia(nombreJugador);
		  }
		  this.vista.rangoPolicia();
		  this.vista.detenerPantalla();
		
		  this.vista.noticiasDelRobo();
		  this.vista.detenerPantalla();
		
		  this.vista.mision();
		  this.vista.detenerPantalla();
		
		  this.cicloDelCaso();
		
		  this.arrestoDelCaso();
		  this.vista.detenerPantalla();
		  
		  continuar = this.vista.continuarCaso();
		  cantidadDeCasos ++;
		  this.vista.detenerPantalla();
		}
	}
	
	private void cicloDelCaso() throws IOException {
		
		List<String> descripciones = new ArrayList<String>();
		descripciones.add(" ");
        descripciones.add(" ");
        descripciones.add(" ");
        descripciones.add(" ");
        descripciones.add(" ");
		    
		while ( !this.juego.casoTerminado() ) {
			
			this.vista.estadoDelJuego();
			int opcionPrincipal = this.vista.menuPrincipal();
			Capital opcionCapital;
			
			switch(opcionPrincipal) {
			
				case 1:  opcionCapital = this.vista.menuCapitales();
				          this.juego.moverPolicia(opcionCapital);
					      break;
					    
				case 2: this.vista.menuLugares();				       
				        break;
				        
				case 3: descripciones = this.vista.descripcionesDelLadron(descripciones);
				        break;
				        
			    default: break;	    
			}
			this.vista.detenerPantalla();
		}
	}
	
	private void arrestoDelCaso() {
		
		if ( juego.verificarOrdenDeArresto() ) {
			this.vista.casoGanado();
		}else {
			this.vista.casoPerdido();
		}	
	}
}
